草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - STL 替代方案

我真的很讨厌使用STL容器,因为它们会使我的代码的调试版本运行得非常缓慢。其他人使用什么来代替STL以进行调试构建具有合理的性能?我是一名游戏程序员,这在我从事的许多项目中一直存在问题。使用STL容器处理所有内容时,很难达到60fps。我的大部分工作都使用MSVC。 最佳答案 EASTL是一种可能性,但仍不完美。ElectronicArts的PaulPedriana对各种STL实现在游戏应用程序中的性能进行了调查,其摘要可在此处找到:http://www.open-std.org/jtc1/sc22/wg21/docs/papers

c++ - 如何 fold STL 容器?

我需要一个类似Haskell的foldl函数来fold任何STL容器。预期签名如下:templateIterator,FoldingFunction,ResultResultfoldl(Iteratorbegin,Iteratorend,FoldingFunctionf,ResultinitValue);标准STL没有这样的功能。Boost有吗?我知道实现起来很简单,但我想知道是否有现成的标准化实现。还有一个问题:您通常如何在C++/STL中fold数据列表? 最佳答案 STL确实有这样的功能:std::accumulate.但是,

c++ - 如何 fold STL 容器?

我需要一个类似Haskell的foldl函数来fold任何STL容器。预期签名如下:templateIterator,FoldingFunction,ResultResultfoldl(Iteratorbegin,Iteratorend,FoldingFunctionf,ResultinitValue);标准STL没有这样的功能。Boost有吗?我知道实现起来很简单,但我想知道是否有现成的标准化实现。还有一个问题:您通常如何在C++/STL中fold数据列表? 最佳答案 STL确实有这样的功能:std::accumulate.但是,

c++ - C/C++ 标准库命名约定的名称?

我想知道C/C++标准库中使用的命名约定是否有名称,或者至少有一个备忘单,我可以在其中查找规则。例如push_back--underscoreusedsetstate--butnotusedhere!string::npos--whentouseabbreviations?fprintf...C/C++标准库中使用的命名约定是否有特定的名称? 最佳答案 C/C++使用著名的make-stuff-up-as-we-go-along命名约定。一般来说,关于C/C++标准库命名约定,您可以说的唯一一致的事情是它不使用驼峰式大小写(C++S

c++ - C/C++ 标准库命名约定的名称?

我想知道C/C++标准库中使用的命名约定是否有名称,或者至少有一个备忘单,我可以在其中查找规则。例如push_back--underscoreusedsetstate--butnotusedhere!string::npos--whentouseabbreviations?fprintf...C/C++标准库中使用的命名约定是否有特定的名称? 最佳答案 C/C++使用著名的make-stuff-up-as-we-go-along命名约定。一般来说,关于C/C++标准库命名约定,您可以说的唯一一致的事情是它不使用驼峰式大小写(C++S

c++ - STL vector 和 c++ : how to . 在没有默认构造函数的情况下调整大小?

我如何告诉STL,特别是对于vector中的方法resize(),使用默认构造函数以外的构造函数以及使用哪些参数来初始化对象?例如:classsomething{inta;something(intvalue);}std::vectormany_things;many_things.resize(20);更一般地,当STL需要创建对象并将参数传递给该构造函数时,如何强制STL使用我的构造函数?在我的情况下,添加默认构造函数不是一种选择,我不希望使用指针数组来解决问题。 最佳答案 使用2参数重载:many_things.resize(

c++ - STL vector 和 c++ : how to . 在没有默认构造函数的情况下调整大小?

我如何告诉STL,特别是对于vector中的方法resize(),使用默认构造函数以外的构造函数以及使用哪些参数来初始化对象?例如:classsomething{inta;something(intvalue);}std::vectormany_things;many_things.resize(20);更一般地,当STL需要创建对象并将参数传递给该构造函数时,如何强制STL使用我的构造函数?在我的情况下,添加默认构造函数不是一种选择,我不希望使用指针数组来解决问题。 最佳答案 使用2参数重载:many_things.resize(

c++ - STL 迭代器是否保证集合更改后的有效性?

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated

c++ - STL 迭代器是否保证集合更改后的有效性?

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated

c++ - C++ STL中的二叉搜索树实现?

请问您知道C++STL是否包含二叉搜索树(BST)实现,或者我是否应该构建自己的BST对象?如果STL不包含BST的实现,是否有可用的库?我的目标是能够尽快找到所需的记录:我有一个记录列表(它不应该超过几千个。),我做一个每帧(它是一个电脑游戏)在该列表中搜索。我使用unsignedint作为我感兴趣的记录的标识符。无论哪种方式最快对我来说都是最好的。 最佳答案 您需要一种在给定key的情况下查找某些数据的方法。由于键是unsignedint,这为您提供了多种可能性。当然,你可以使用std::map:typedefstd::mapm